<?php

/**
 * @author Paweł Napieracz
 * @version 1.0
 */
class Modul_Admin_Zarzadzanie_GrupyEdycja extends Modul_Admin_Abstract {

    public function inicjalizuj() {
        $this->tytul = 'Zarządzaj grupami';

        if (isset($this->param['akcja']) &&
                $this->param['akcja'] == 'edytuj') {
            $this->edytuj();
        } else if (isset($this->param['akcja']) &&
                $this->param['akcja'] == 'dodaj') {
            $this->dodaj();
        } else if (isset($this->param['akcja']) &&
                $this->param['akcja'] == 'usun') {
            $this->usun();
        }
    }
    
    public function prawa() {
        if (isset($this->uzytkownik['uprawienia']) &&
                !in_array('cms_zarzadzanie_grupy', $this->uzytkownik['uprawienia'])) {
            $this->zakoncz('/cms/logowanie/akcja,blad,info,3.html');
        }
        parent::prawa();
    }

    private function edytuj() {
        $id = isset($this->param['id']) ? $this->param['id'] : $_POST['id'];
        if (!is_numeric($id)) {
            die();
        }

        $tab = new AutoDB('cms_grupy','id');
        $grupa = $tab->Get($id);
        
        /* Lista uprawieniń */
        $tabUprawnienia = new AutoDB('cms_uprawnienia');
        $wszystkieUprawienia = $tabUprawnienia->Select('*')->Run()->AsArray();
        $tmp = array();
        foreach ($wszystkieUprawienia as $v) {
            $tmp[$v['klucz']] = $v['nazwa'];
        }
        $wszystkieUprawienia = $tmp;
        unset($tmp);
        
        /* Lista uprawnień grupy */
        $uprawienia = array();
        $uprawieniaSql = $tabUprawnienia->Select('cms_uprawnienia.klucz, cms_uprawnienia.nazwa')->
                Join('cms_grupy_uprawnienia', 'id_uprawienia = cms_uprawnienia.id')->
                Where(array('id_grupa'=>$id))->Run();
        if($uprawieniaSql !== false){
            $uprawieniaSql = $uprawieniaSql->AsArray();
            if(is_array($uprawieniaSql)){
                foreach ($uprawieniaSql as $v) {
                    $uprawienia[$v['klucz']] = $v['nazwa'];
                }
            }
        }

        /* Wygenerowanie formularza */
        $form = new Form_Grupy();
        $this->daneTPL['form']['poczatek'] =
                $form->otworzForma('/cms/grupy/edycja/akcja,edytuj.html');
        $this->daneTPL['form']['grupa'] =
                $form->generujGrupe($grupa);
        $this->daneTPL['form']['uprawienia'] =
                $form->generujUprawienia(
                isset($_POST['uprawienia']) ? $_POST['uprawienia'] : $uprawienia, $wszystkieUprawienia);
        $this->daneTPL['form']['koniec'] =
                $form->zamknijForma();
        
        /* Sprawdzenie czy wysłano dane i czy dane są zwalidowanie poprawnie */
        if (isset($_POST['nazwa'])) {
            $bledy = $this->waliduj();
            if (Form_Valid::isValid($bledy)) {
                $grupa->Set('nazwa', $_POST['nazwa']);
                $grupa->save();
                $idGrupy = $id;
                /* Zapisywanie uprawnień */
                if (isset($_POST['uprawienia'])) {
                    /* Usuwamy wszystkie zlinkowane wcześniej uprawienia */
                    $tabGrupyUprawienia = new AutoDB('cms_grupy_uprawnienia');
                    $tabGrupyUprawienia->
                            Query("Delete From {$tabGrupyUprawienia->TableName()} Where id_grupa = '$idGrupy'", false);
                    /* Dodajemy uprawienia */
                    foreach ($_POST['uprawienia'] as $key => $uprawienie) {
                        //pobranie id modułu
                        $idUprawienia = $tabUprawnienia->
                                Select('*')->
                                Where(array('klucz' => $key))->
                                GetFirst();
                        $idUprawienia = $idUprawienia['id'];
                        //połącznie uprawienia z grupą
                        $pola = array(
                            'id_grupa' => $idGrupy,
                            'id_uprawienia' => $idUprawienia
                        );
                        $tabGrupyUprawienia->Create()->SetAll($pola)->Save();
                    }
                }
                $this->zakoncz('/cms/grupy/');
            } else {
                $this->daneTPL['bledy'] = $bledy;
            }
        }
    }

    private function dodaj() {
        $tab = new AutoDB('cms_grupy');
        $grupa = $tab->Create();

        /* Lista uprawieniń */
        $tabUprawnienia = new AutoDB('cms_uprawnienia');
        $wszystkieUprawienia = $tabUprawnienia->Select('*')->Run()->AsArray();
        $tmp = array();
        foreach ($wszystkieUprawienia as $v) {
            $tmp[$v['klucz']] = $v['nazwa'];
        }
        $wszystkieUprawienia = $tmp;
        unset($tmp);

        /* Wygenerowanie formularza */
        $form = new Form_Grupy();
        $this->daneTPL['form']['poczatek'] =
                $form->otworzForma('/cms/grupy/edycja/akcja,dodaj.html');
        $this->daneTPL['form']['grupa'] =
                $form->generujGrupe($grupa);
        $this->daneTPL['form']['uprawienia'] =
                $form->generujUprawienia(
                isset($_POST['uprawienia']) ? $_POST['uprawienia'] : array(), $wszystkieUprawienia);
        $this->daneTPL['form']['koniec'] =
                $form->zamknijForma();

        /* Sprawdzenie czy wysłano dane i czy dane są zwalidowanie poprawnie */
        if (isset($_POST['nazwa'])) {
            $bledy = $this->waliduj();
            if (Form_Valid::isValid($bledy)) {
                $grupa->Set('nazwa', $_POST['nazwa']);
                $grupa->save();
                $idGrupy = $grupa['id'];
                /* Zapisywanie uprawnień */
                if (isset($_POST['uprawienia'])) {
                    /* Usuwamy wszystkie zlinkowane wcześniej uprawienia */
                    $tabGrupyUprawienia = new AutoDB('cms_grupy_uprawnienia');
                    $tabGrupyUprawienia->
                            Query("Delete From {$tabGrupyUprawienia->TableName()} Where id_grupa = '$idGrupy'", false);
                    /* Dodajemy uprawienia */
                    foreach ($_POST['uprawienia'] as $key => $uprawienie) {
                        //pobranie id modułu
                        $idUprawienia = $tabUprawnienia->
                                Select('*')->
                                Where(array('klucz' => $key))->
                                GetFirst();
                        $idUprawienia = $idUprawienia['id'];
                        //połącznie uprawienia z grupą
                        $pola = array(
                            'id_grupa' => $idGrupy,
                            'id_uprawienia' => $idUprawienia
                        );
                        $tabGrupyUprawienia->Create()->SetAll($pola)->Save();
                    }
                }
                $this->zakoncz('/cms/grupy/');
            } else {
                $this->daneTPL['bledy'] = $bledy;
            }
        }
    }

    private function waliduj() {
        /* Walidacja */
        if (Form_Valid::isEmpty(Form_Valid::getFormValue('nazwa'))) {
            $bledy[] = "Nazwa grupy nie może być pusta";
        } else if (Form_Valid::isTooLong(Form_Valid::getFormValue('nazwa'), 80)) {
            $bledy[] = "Nazwa grupy musi mieć mniej niż 80 znaków";
        } else if (!Form_Valid::isTooShort(Form_Valid::getFormValue('nazwa'), 3)) {
            $bledy[] = "Nazwa grupy musi mieć więcej niż 3 znaków";
        }
        
        //pobieram wszystkie grupy i sprawdzam czy nazwa jest unikatowa
        $tab = new AutoDB('cms_grupy');
        $wynik = $tab->Select('*')->
                Where(array('nazwa' => Form_Valid::getFormValue('nazwa')))->
                GetFirst();
        if (Form_Valid::isEmpty(Form_Valid::getFormValue('nazwa'))) {
            $bledy[] = "Nazwa grupy nie może być pusta";
        } else if (Form_Valid::isTooLong(Form_Valid::getFormValue("nazwa"), 80)) {
            $bledy[] = "Nazwa grupy musi mieć mniej niż 80 znaków";
        } else if ($wynik !== false &&
                ($wynik['id'] != Form_Valid::getFormValue("id"))) {
            $bledy[] = "Twoja nazwa nie jest unikatowa!";
        } else if (!Form_Valid::isTooShort(Form_Valid::getFormValue('nazwa'), 3)) {
            $bledy[] = "Nazwa grupy musi mieć więcej niż 3 znaków";
        }

        return $bledy;
    }

    private function usun() {
        if (!isset($this->param['id']) || !is_numeric($this->param['id'])) {
            die();
        }
        $tabStrona = new AutoDB('cms_strona', 'id');
        $tabStronaModuly = new AutoDB('cms_strona_modul');
        $zapytanie = $tabStronaModuly->
                Select('*')->
                Where('id_strona', $this->param['id'])->
                Run();
        if ($zapytanie !== false) {
            $zapytanie = $zapytanie->AsArray();
        }
        $ok = true;
        /**
         * Mała notka:
         * Jest to zrobione dosyć czasochłonną metodą. 
         * Jednak nie ma metody delete działającej tak jak select w AutoDB.
         */
        /* Usuwanie modułów podpiętych do strony */
        if (is_array($zapytanie)) {
            foreach ($zapytanie as $v) {
                if ($tabStronaModuly->Delete($v['id']) === false) {
                    $ok = false;
                }
            }
        }
        /* Usuwanie wpisu strony */
        if ($tabStrona->Delete($this->param['id']) === false) {
            $ok = false;
        }
        /* Jeżeli coś się nie powiodło wywalenie błędu */
        if ($ok === false)
            echo 'blad';
        die();
    }

}

?>
